|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.ObjectmscJNeuralNet.net.Net
Das eigentliche Multilayered Perceptron (MLP).
Diese Klasse enthält die Kantengewichte des Netzes sowie die Logik zur
Berechnung der Netzausgabe zu eine Eingabe.
Weiterhin wird auch das eigentliche Training, die Reihenfolge der
Berechnung der Gewichte und der rückpropagierte Fehlergradient für jedes Neuron hier ermittelt.
Zusätzlich enthält diese Klasse Methoden zum Laden und Speichern eines Netzes
sowie Hilfsmethoden wie die Transferfunktion und die Ableitung der Transferfunktion.
mscJNeuralNet
gegeben.
Über die Schnittstelle Observable
können Observer Änderungen
des Netzes überwachen.
Created on 29.03.2004
mscJNeuralNet
,
Observable
Field Summary | |
static double |
BIAS_VALUE
|
Constructor Summary | |
Net(int[] pLayerSizes)
Erzeugt ein Netz mit der angegebenen Layerstrucktur. |
Method Summary | |
static double[][] |
calculateGradientsOffline(Net pNet,
double[][] pInputPatterns,
double[][] pOutputPatterns)
Berechnet den aktuellen Fehlergradienten für die gegebenen Lerndatensätze. |
static double |
getAbsRandomWeightValue(double pScaleFactor)
Liefert eine positive Zufallszahl im Bereich von [0; +pScaleFactor]. |
int |
getAmountNeurons()
Liefert die gesamte Anzahl der Neuronen in diesem Netz inklusive BIAS. |
int |
getHiddenLayerAmount()
Liefert die Anzahl der verborgenen Schichten. |
int |
getInputLayerSize()
Liefert die Größe der Eingabeschicht (ohne BIAS). |
int[][] |
getLayerNeurons()
Liefert die Indizes der Neuronen in einem Layer. |
double[] |
getNetOutput(double[] pInputPattern)
Berechnet die Ausgabe des Netzes zur gegebenen Eingabe (Ist-Werte). |
double[] |
getNeuronsOutput(double[] pInputPattern)
Liefert die Ausgabe ALLER Neuronen zur gegebenen Eingabe. |
observerPattern.ObserverManager |
getObserverManager()
|
int |
getOutputLayerSize()
Liefert die Größe der Ausgabeschicht. |
static double |
getRandomWeightValue(double pScaleFactor)
Liefert eine Zufallszahl im Bereich von [-pScaleFactor; +pScaleFactor]. |
double[][] |
getWeights()
Liefert die aktuelle Kantengewichtsmatrix. |
static Net |
load(java.io.File pTargetFile)
Lädt ein Netz aus einer Datei. |
static void |
save(Net pNet,
java.io.File pTargetFile)
Speichert das Netz in einer Datei. |
static double |
sign(double x)
Berechnet die Vorzeichenfunktion für den gegebenen Wert. |
static double |
tanh_diff(double x)
Berechnet die Ableitung des Tangens Hyperbolicus für den gegebenen Wert. |
static double |
tanh(double x)
Berechnet den Tangens Hyperbolicus des gegebenen Wertes. |
java.lang.String |
toString()
|
static void |
train(double[][] pInputPatterns,
double[][] pOutputPatterns,
INetTrainingAlgorithm pAlgo)
Führt einen Lernschritt mit dem Lernverfahren und dem im Lernverfahren vermerkten Netz aus, um die gegebenen Lerndatensätze zu trainieren. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
public static final double BIAS_VALUE
Constructor Detail |
public Net(int[] pLayerSizes)
pLayerSizes
- Die Größen der einzelnen Schichten.Method Detail |
public double[] getNeuronsOutput(double[] pInputPattern) throws PatternDoesNotMatchNetException
getNetOutput(double[])
aufgerufen.
pInputPattern
- Eingabemsuter.
PatternDoesNotMatchNetException
- Falls eines der gegebenen Lerndatensätze
nicht der Eingabe-/ Ausgabeschichtgröße des Netzes entspricht.public double[] getNetOutput(double[] pInputPattern) throws PatternDoesNotMatchNetException
pInputPattern
- Eingabemuster.
PatternDoesNotMatchNetException
- Falls eines der gegebenen Lerndatensätze
nicht der Eingabe-/ Ausgabeschichtgröße des Netzes entspricht.public int getAmountNeurons()
public int getInputLayerSize()
public int getOutputLayerSize()
public double[][] getWeights()
public int[][] getLayerNeurons()
getLayerNeurons().length
Schichten.getWeights()[getLayerNeurons[0][1]][getLayerNeurons[1][0]]liefert den Gewichtswert, der das erste Neuron der ersten Schicht (Eingabeschicht hat den Index 0, erstes Neuron der Eingabeschicht mit Index 1) mit dem ersten Neuron der zweiten Schicht (hier Ausgabeschicht mit Index 1, erstes Neuron mit Index 0). Zu beachten ist, dass das Neuron mit dem Index 0 der Eingabeschicht das BIAS ist:
getWeights()[getLayerNeurons[0][0]][getLayerNeurons[1][0]]liefert die Verbindung BIAS (Schicht 0, Neuronindex 0) zum ersten Neuron der zweiten Schicht (Schicht 1, Neuronindex 0).
public int getHiddenLayerAmount()
public observerPattern.ObserverManager getObserverManager()
getObserverManager
in interface observerPattern.Observable
public java.lang.String toString()
public static double getRandomWeightValue(double pScaleFactor)
pScaleFactor
- Ein positiver Wert, der festlegt, in welchem Bereich
die Zufallszahl liegen soll.
public static double getAbsRandomWeightValue(double pScaleFactor)
pScaleFactor
- Eine positive Obergrenze für die Zufallszahl.
public static double[][] calculateGradientsOffline(Net pNet, double[][] pInputPatterns, double[][] pOutputPatterns) throws PatternDoesNotMatchNetException
pNet
- Das Netz, dessen Fehlergradienten berechnet werden sollen.pInputPatterns
- Eingabemuster der Lerndatensätze.pOutputPatterns
- Ausgabemuster der Lerndatensätze.
PatternDoesNotMatchNetException
- Falls eines der gegebenen Lerndatensätze
nicht der Eingabe-/ Ausgabeschichtgröße des Netzes entspricht.public static void train(double[][] pInputPatterns, double[][] pOutputPatterns, INetTrainingAlgorithm pAlgo) throws PatternDoesNotMatchNetException
INetTrainingAlgorithm.setNet(Net)
dem Lernverfahren mitgeteilt werden.calculateGradientsOffline(Net, double[][], double[][])
berechnet.
Dann werden die aktuellen Gradienten dem Lernverfahren durch Aufruf der Methode
INetTrainingAlgorithm.setActualGradients(double[][])
mitgeteilt.
Anschließend wird die private Methode updateWeights(INetTrainingAlgorithm) aufgerufen,
die schließlich ihrerseits für jedes Kantengewicht die Methode
INetTrainingAlgorithm.applyWeightUpdate(int, int)
aufruft und den
aktuellen Wert berechnet.INetTrainingAlgorithm.setCycle(int)
der aktuelle Lernschritt um eins erhöht.
pInputPatterns
- Eingabemuster der Lerndaten.pOutputPatterns
- Ausgabemuster der Lerndaten.pAlgo
- Lernverfahren, mit dem trainiert werden soll.
PatternDoesNotMatchNetException
- Falls eines der gegebenen Lerndatensätze
nicht der Eingabe-/ Ausgabeschichtgröße des Netzes entspricht.public static double tanh(double x) throws java.lang.ArithmeticException
x
- Der Wert, dessen Tangens Hyperbolicus berechnet werden soll.
java.lang.ArithmeticException
public static double tanh_diff(double x) throws java.lang.ArithmeticException
x
- Der Wert, zu dem die Ableitung des Tangens Hyperbolicus berechnet werden soll.
java.lang.ArithmeticException
public static double sign(double x)
sign(x) = -1 falls x < 0 sign(x) = +1 falls x > 0 sign(x) = 0 falls x = 0
x
- Der Wert, zu dem die Vorzeichenfunktion berechnet werden soll.
public static void save(Net pNet, java.io.File pTargetFile) throws java.io.IOException
Anzahl Layer Anzahl Neuronen Layer 1 (Eingabeschicht ohne BIAS) Anzahl Neuronen Layer 2 ... Anzahl Neuronen Layer x (Ausgabeschicht) Anzahl Neuronen insgesammt (inklusive BIAS) Gewichtswert [0][0] Gewichtswert [0][1] ... Gewichtswert [0][x] Gewichtswert [1][0] Gewichtswert [1][1] ... Gewichtswert [1][x] ... Gewichtswert [x][x]
pNet
- Das zu speichernde Netz.pTargetFile
- Datei, in der das Netz gespeichert werden soll.
java.io.IOException
- Falls bei der Ausgabe des Netzes in die Datei ein
Fehler entsteht.public static Net load(java.io.File pTargetFile) throws java.io.IOException
save(Net, File)
beschrieben wurde.
pTargetFile
- Datei, aus der das Netz geladen werden soll.
java.io.IOException
- Falls bei der Ausgabe des Netzes in die Datei ein
Fehler entsteht.save(Net, File)
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |